/*
 * Copyright (c) 2025 Industrial Software Feature Database
 */
package com.comac.ins.isfd.service;

import com.comac.ins.common.core.domain.model.LoginUser;
import com.comac.ins.common.mybatis.core.page.PageQuery;
import com.comac.ins.common.mybatis.core.page.TableDataInfo;
import com.comac.ins.isfd.constant.enums.IsfdImportMethodEnum;
import com.comac.ins.isfd.domain.bo.IsfdDatabaseDataImportRecordBo;
import com.comac.ins.isfd.domain.bo.IsfdDatabaseDataImportSubRecordBo;
import com.comac.ins.isfd.domain.bo.query.IsfdDatabaseDataImportRecordQueryBo;
import com.comac.ins.isfd.domain.vo.IsfdDatabaseDataImportRecordListVo;
import com.comac.ins.isfd.domain.vo.IsfdDatabaseDataImportRecordVo;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 数据导入记录Service接口
 *
 * @author Lion Li
 * @date 2024-12-06
 */
public interface IIsfdDatabaseDataImportRecordService {

    /**
     * 查询数据导入记录
     *
     * @param id 主键
     * @return 数据导入记录
     */
    IsfdDatabaseDataImportRecordVo queryById(Long id);


    TableDataInfo<IsfdDatabaseDataImportRecordListVo> queryPageList(IsfdDatabaseDataImportRecordQueryBo queryBo);

    /**
     * 分页查询数据导入记录列表
     *
     * @param bo        查询条件
     * @param pageQuery 分页参数
     * @return 数据导入记录分页列表
     */
    TableDataInfo<IsfdDatabaseDataImportRecordVo> queryPageList(IsfdDatabaseDataImportRecordBo bo, PageQuery pageQuery);

    /**
     * 查询符合条件的数据导入记录列表
     *
     * @param bo 查询条件
     * @return 数据导入记录列表
     */
    List<IsfdDatabaseDataImportRecordVo> queryList(IsfdDatabaseDataImportRecordBo bo);

    /**
     * 新增数据导入记录
     *
     * @param bo 数据导入记录
     * @return 是否新增成功
     */
    Boolean insertByBo(IsfdDatabaseDataImportRecordBo bo);

    /**
     * 修改数据导入记录
     *
     * @param bo 数据导入记录
     * @return 是否修改成功
     */
    Boolean updateByBo(IsfdDatabaseDataImportRecordBo bo);

    void batchUpdateById(List<IsfdDatabaseDataImportRecordBo> boList);

    /**
     * 校验并批量删除数据导入记录信息
     *
     * @param ids 待删除的主键集合
     * @return 是否删除成功
     */
    Boolean deletByIds(Collection<Long> ids);

    /**
     * 生成导入记录
     */
    IsfdDatabaseDataImportRecordBo createImportRecord(IsfdDatabaseDataImportRecordBo recordBo, IsfdImportMethodEnum importMethodEnum, String mainTableName, Map<String, Integer> tableNameAndDataQuantity, LoginUser loginUser);

    /**
     * 更新或生成导入记录子表
     */
    void updateOrCreateImportSubRecord(Long recordId, String tableName, Integer createdCount, Integer deletedCount, Integer existedCount);

    /**
     * 校验是否需要重新计数
     */
    IsfdDatabaseDataImportSubRecordBo checkAndUpdateSubRecord(Long recordId, String tableName);

    /**
     * 重新计算表中数据量
     *
     * @param recordId
     * @param tableName
     * @param isDelete
     * @return
     */

    Long countMongoDataByImportId(Long recordId, String tableName, Boolean isDelete);

    /**
     * 统计实际数量
     */
    Integer getRealCountByCondition(Long recordId, String tableName);
}
